﻿using Order.Api.Read.Application.Command;
using Order.Api.Read.Dto.Order;
using Order.ErrorCode;
using Order.Domain.OrderDomain;

namespace Order.Api.Read.Service.RefundService
{
    /// <summary>
    /// 退款服务接口
    /// 定义退款相关的业务操作
    /// </summary>
    public interface IRefundService
    {
        /// <summary>
        /// 获取退款分页数据
        /// 支持关键字搜索、时间范围筛选等功能
        /// </summary>
        /// <param name="command">分页查询命令，包含查询条件和分页参数</param>
        /// <returns>分页结果，包含退款列表和总数信息</returns>
        /// <remarks>
        /// 关键字搜索支持以下字段：
        /// - 退款单号
        /// - 处理人姓名
        /// - 备注信息
        /// - 患者姓名（通过关联订单查询）
        /// - 患者手机号（通过关联订单查询）
        /// - 药品订单的用户名和收货人
        /// </remarks>
        Task<ApiPageIng<Refund>> GetRefundPageAsync(RefundPageCommand command);

        /// <summary>
        /// 获取退款详情
        /// 根据退款ID查询详细信息，包括关联的订单和患者信息
        /// </summary>
        /// <param name="id">退款ID</param>
        /// <returns>退款详情DTO，如果未找到则返回null</returns>
        /// <remarks>
        /// 返回的信息包括：
        /// - 退款基本信息（退款单号、金额、状态等）
        /// - 关联订单信息（订单编号、金额等）
        /// - 患者信息（手机号等）
        /// 
        /// 支持四种订单类型：
        /// - 问诊订单
        /// - 处方订单
        /// - 挂号订单
        /// - 药品订单
        /// </remarks>
        Task<RefundDetailDto> GetRefundDetailAsync(int id);
    }
}
